/**
 * Clase Leer
 *
 * @author David Candia Martin
 * @version 1.0 - 03/12/13
 */

import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Leer {

    private ArrayList libro_plano;      //ArrayList para el libro_plano
    private ArrayList libro_binario;    //ArrayList para el libro_plano

    private String[] vector_binario;   //Vecto para el libro en binario

    private Scanner sc;                 //Para leer texto plano
    private File archivo;               //Archivo de texto

    //Streams de lectura para archivos binarios
    private FileInputStream f_in;
    private DataInputStream d_in;

    /**
     * Constructor
     * @param archivo (File)
     */
    public Leer(File archivo) {

        this.archivo = archivo;

    }

    /**
     * Lee archivos de texto plano
     */
    public ArrayList leer_plano() {

        try {
            libro_plano = new ArrayList<String>();

            sc = new Scanner(archivo);
            //Cada linea se almacena en una posicion
            while (sc.hasNext()) {
                libro_plano.add(sc.nextLine());
            }

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } finally {
            sc.close();
        }

        return libro_plano;
    }

    /**
     * Lee un archivo binario y devuelve su contenido en un vector de String.
     * @return (String[])
     */
    public String[] leer_binario() {

        try {
            libro_binario = new ArrayList<String>();

            //Streams de lectura
            f_in = new FileInputStream(archivo);
            d_in = new DataInputStream(f_in);
            //Almacenamos el contenido en una lista hasta el EOF
            while (true) {
                libro_binario.add(d_in.readUTF());
            }

        } catch (EOFException e) {
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                d_in.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        //Dimensionamos el vector
        vector_binario = new String[libro_binario.size()];
        //Copiamos el contenido de la lista al vector
        libro_binario.toArray(vector_binario);

        return vector_binario;
    }

}
